using CLELCore.Executable;

namespace CLELCore.Assembly
{
	public class CLIHeader
	{
		public const int CLIHEADER_SIZE = 72;

		private int _cb;
		private short _major_runtime_version;
		private short _minor_runtime_version;
		private DataDirectory _metadata;
		private int _flags;
		private Token _entry_point_token;
		private DataDirectory _resources; 
		private DataDirectory _strong_name_signature;
		private long _code_manager_table;
		private long _vtable_fixups;
		private long _export_address_table_jumps;
		private long _manage_native_header;

		public int Cb
		{
			get
			{
				return _cb;
			}
			set
			{
				_cb = value;
			}
		}
		public short MajorRuntimeVersion
		{
			get
			{
				return _major_runtime_version;
			}
			set
			{
				_major_runtime_version = value;
			}
		}
		public short MinorRuntimeVersion
		{
			get
			{
				return _minor_runtime_version;
			}
			set
			{
				_minor_runtime_version = value;
			}
		}
		public DataDirectory Metadata
		{
			get
			{
				return _metadata;
			}
			set
			{
				_metadata = value;
			}
		}
		public int Flags
		{
			get
			{
				return _flags;
			}
			set
			{
				_flags = value;
			}
		}
		public Token EntryPointToken
		{
			get
			{
				return _entry_point_token;
			}
			set
			{
				_entry_point_token = value;
			}
		}
		public DataDirectory Resources
		{
			get
			{
				return _resources;
			}
			set
			{
				_resources = value;
			}
		}
		public DataDirectory StrongNameSignature
		{
			get
			{
				return _strong_name_signature;
			}
			set
			{
				_strong_name_signature = value;
			}
		}
		public long CodeManagerTable
		{
			get
			{
				return _code_manager_table;
			}
			set
			{
				_code_manager_table = value;
			}
		}
		public long VTableFixups
		{
			get
			{
				return _vtable_fixups;
			}
			set
			{
				_vtable_fixups = value;
			}
		}
		public long ExportAddressTableJumps
		{
			get
			{
				return _export_address_table_jumps;
			}
			set
			{
				_export_address_table_jumps = value;
			}
		}
		public long ManageNativeHeader
		{
			get
			{
				return _manage_native_header;
			}
			set
			{
				_manage_native_header = value;
			}
		}

		public CLIHeader()
		{
		}
	}
}
